package com.sakura.system.controller.yzccontroller;


import com.sakura.system.coommon.response.ResponseResult;
import com.sakura.system.entity.yzc.SysSession;
import com.sakura.system.entity.yzc.SysSessionVo;
import com.sakura.system.service.impl.yzcimpl.SysSessionServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
@RequestMapping("${app.router.url}")
public class SysSessionController extends BaseController {

    @Autowired
    private SysSessionServiceImpl sysSessionService;

    /**
     * 根据vo中的条件查询所有场次，如果在前台购票部分注意设置pageSize=100或者其他大一些的数
     *
     * @param sysSessionVo
     * @return
     */
    @GetMapping("/sysSession")
    public ResponseResult findByVo(SysSessionVo sysSessionVo) {
        startPage();
        List<SysSession> list = sysSessionService.findByVo(sysSessionVo);
        return getResult(list);
    }

    /**
     * 根据会话ID查找会话信息。
     *
     * @param id 会话的唯一标识符。
     * @return 返回会话查询结果的响应体。
     */
    @GetMapping("/sysSession/find/{id}")
    public ResponseResult findSessionById(@PathVariable Long id) {
        // 取消所有超时订单并释放占座资源
//        ApplicationContextUtils.getBean("cancelTimeoutBill");
        return getResult(sysSessionService.findSessionById(id));
    }


    /**
     * 根据电影ID或影厅ID查询相应的场次信息，以判断是否可以进行编辑操作。
     *
     * @param sysSession 包含电影ID或影厅ID的场次信息对象。其中，电影ID和影厅ID至少需提供一个。
     * @return 返回一个响应结果，包含查询到的场次信息及其是否可编辑的状态。
     */
    @GetMapping("/sysSession/isAbleEdit")
    public ResponseResult findSessionByMovieIdOrHallId(SysSession sysSession) {
        // 通过服务层方法查询场次信息，并封装成响应结果返回
        return getResult(sysSessionService.findSessionByMovieIdOrHallId(sysSession));
    }

    /**
     * 添加会话信息
     *
     * @param sysSession 会话对象，包含会话相关的详细信息
     * @return 返回操作结果，包括成功与否、错误码等
     */
    @PostMapping("/sysSession")
    public ResponseResult addSession(@RequestBody SysSession sysSession) {
        // 调用会话服务，添加会话信息，并获取操作结果
        return getResult(sysSessionService.addSession(sysSession));
    }

    /**
     * 更新会话信息
     *
     * @param sysSession 会话对象，包含需要更新的会话信息
     * @return 返回操作结果，成功返回操作状态码和消息，失败返回错误状态码和消息
     */
    @PutMapping("/sysSession")
    public ResponseResult updateSession(@RequestBody SysSession sysSession) {
        // 调用会话服务更新会话信息，并获取操作结果
        return getResult(sysSessionService.updateSession(sysSession));
    }

    /**
     * 删除会话
     *
     * @param ids 会话ID数组，通过路径变量传递，对应要删除的多个会话。
     * @return 返回操作结果，封装在ResponseResult对象中。
     */
    @DeleteMapping("/sysSession/{ids}")
    public ResponseResult deleteSession(@PathVariable Long[] ids) {
        // 调用会话服务删除指定ID的会话，然后封装并返回操作结果
        return getResult(sysSessionService.deleteSession(ids));
    }

}
